package com.zxq.frame;

import com.zxq.factory.annotate.DecoderField;
import com.zxq.factory.annotate.EncoderField;
import com.zxq.factory.annotate.Frame;
import com.zxq.factory.enums.EField;
import com.zxq.factory.enums.ETrimMethod;
import lombok.Data;

@Data
@Frame
public class UartFrame {

    /**
     * SOP：	单字节字头。命令为 ee，应答为66 。
     * LEN：	单字节。从CMD到SUM的字节数（含CMD和SUM）
     * CMD：
     * SESSION_ID：	单字节，命令字节。
     * 服务端回话编号，6个字节，用户服务端识别通讯会话。如果服务端发起的会话设备应答服务端需要带上服务端下发的会话ID。如果设备发起会话则会话ID为“000000”
     * DATA：	数据字节，不定长。
     * SUM：	单字节，LEN、CMD、SESSION_ID、DATA的异或值
     */
    // 66 0D 06 00000000 00000500000000 0E
    @EncoderField(sequence = 1,len = 1)
    @DecoderField(sequence = 1,param = 1)
    Integer sop = 0xee;
    @EncoderField(sequence = 2,len = 1)
    @DecoderField(sequence = 2,param = 1)
    Integer len;
    @EncoderField(sequence = 3,len = 1)
    @DecoderField(sequence = 3,param = 1)
    Integer cmd;

    @EncoderField(sequence = 4,len = 6,field = EField.Hex)
    @DecoderField(sequence = 4,param = 6,field = EField.Hex)
    String session_id;

    @EncoderField(sequence = 5,field = EField.Bytes)
    @DecoderField(sequence = 5,field = EField.Bytes,method = ETrimMethod.Tail,param = 1)
    byte[] data;

    @EncoderField(sequence = 6,field = EField.Int,len = 1)
    @DecoderField(sequence = 6,param = 1,field = EField.Int)
    Integer sum;







}
